<?php
/**
 * Classe PDOStatement améliorée
 * Permet de retenir le dernier fetch utilisé lors d'un fetch
 *
 * L'extends est utilisé uniquement pour avoir le même père (PDOStatement)
 */
class EnhancedPDOStatement {
	
	public $lastFetch;
	private $pdostatement;
	private $pdo;
	
	public function __construct(PDOStatement $st, PDO $p) {
		$this->pdostatement = $st;
		$this->pdo = $p;
	}
	
	public function getPDO() {
		return $this->pdo;
	}
	
	public function __call($name, $args) {
		$res = null;
		if (method_exists($this->pdostatement, $name)) {
			$res = call_user_func_array(array($this->pdostatement, $name), $args);
			
			// On garde le dernier fetch
			if ($name == 'fetch') {
				$this->lastFetch = $res;
			}
		}
		return $res;
	}
	
	public function isSuccess() {
		$errorcode = $this->errorCode();
		$success = false;
		if (is_null($errorcode) || substr($errorcode,0,2) == "00") {
			$success = true;
		}
		return $success;
	}
	
	public function lastInsertId() {
		return $this->pdo->lastInsertId();
	}
	
	public function fetchOne($type = "object") {
		$res = null;
		if ($row = $this->fetch()) {
			$res = $row[0];
			switch($type) {
				case 'int':
					$res = intval($row[0]);
					break;
					
				case 'float':
					$res = floatval($row[0]);
					break;
				
				case 'object':
					$res = $row;
					break;
			}
		}
		return $res;
	}
}

?>